The present invention relates to interactive computer visualization systems wherein a user defines a point of view with respect to computer generated graphics and, in particular, to a method for smoothly maintaining a vertical orientation during a computer animation.
From the beginning of work on computer animation, maintaining a vertical orientation has been a key aspect of motion control. As long as the viewer does not attempt to look straight up or down, maintaining vertical is easy to accomplish. However, if the viewer-does attempt to look straight up or down, he can become quickly disoriented, and smoothly reorienting the viewer can become difficult.
The cause of the orientation problem is due to the human perception of up and down and its manifestation in modeling viewer movements. Although people are often told to look in a particular direction, it is usually assumed that the orientation of one's head should be vertical and not sideways. Thus, when specifying viewer movements in a computer animation, the natural tendency is to only specify "look" direction and assume a vertical orientation.
Referring to FIG. 1, the above translates into the following equations to describe the orientation of the viewer: EQU L=the current look direction EQU H=L U EQU V=H L,
where the symbol indicates a vector cross-product, U is the upward direction, H is the horizontal direction, and V is the vertical direction.
The problem with this definition occurs when L=.+-.U, i.e., when one is looking straight up or down. In this case, H and V are both identically zero. This is due to the lack of a defined vertical direction when one is looking straight up or down and results in what is commonly referred to as vertigo.
To solve this problem, one can either always specify a vertical direction as well as a look direction or invent an approach which avoids vertigo. Many commercial animation packages rely on the user specifying vertical and look directions at a series of key frames. However, for systems that define the animation sequences on the fly, like walk through systems, it is not deskable for users to stop and indicate vertical directions.
Therefore, a scheme must be developed to avoid vertigo.
One known approach has been to use the old vertical direction as the new definition of the upward direction, i.e., EQU L=the current look direction EQU H'=L V EQU V'=H L
where H' and V' are the new values of H and V, respectively. This method avoids the vertigo singularity, but never enforces the notion of a natural, global upward direction. Because of this, the vertical direction can quickly rotate away from the upward direction and the viewer can become disoriented.
One can combine the two methods described using the first scheme when the viewer is not looking directly up or down, and the second scheme when the viewer is. The trouble with this approach occurs when switching from the second scheme back to the first, e.g., when the viewer stops looking straight up or down. At this point, there is an abrupt change in the vertical direction which disrupts smooth motion.
A fourth scheme is to base the look, vertical and horizontal directions on three rotation angles, namely roll, pitch and yaw (or heading). These three angles are commonly used for orienting airplanes and ships, and in simulations of those vehicles. The heading describes rotation about the vertical direction or Z-axis, the pitch describes rotation about the horizontal direction or X-axis, and the roll describes rotation about the look direction or Y-axis, (see FIG. 2 which depicts an aircraft 18 and its associated angles of position). The orientation is determined by rotating first about the Y-axis, then the X-axis, and then the Z-axis, i.e. the total rotation matrix, R, is given by, EQU R=RotY(roll)*RotX(pitch)*RotZ(heading)
To find the new horizontal direction, transform the X-axis by R, to find the new vertical transform the Z-axis, and to find the new look direction transform the Y-axis.
To maintain a sense of up in this scheme, simply eliminate roll (set roll equal to zero). The heading and pitch are given from user input (often through the x and y position of the mouse). This does maintain up, but as with the other schemes, it only works for as long as the viewer does not look straight up or down. To show this, consider the transformed vertical direction when roll=0, EQU V=(sin (pitch) sin (heading), -sin (pitch) cos (heading), cos (pitch))
As the pitch goes from 0 to 90 the z-component of V is positive, and the viewer has a proper sense of up. When the pitch reaches 90 degrees the z-component of V is zero, the viewer loses up, but that is expected because the look direction is pointed straight up. However, as soon as the pitch increases beyond 90 degrees, the z-component of V is negative, the viewer's sense of up has flipped and the viewer becomes disoriented. This is exactly the sensation one experiences in a loop on a roller-coaster.
All four of these schemes either cause the viewer to become disoriented when the look direction moves through the up direction, or cause a sudden change in orientation to "snap" the viewer back into a well-oriented position.
In summary, there is a clear need in the computer animation art for a method to smoothly maintain a vertical orientation during a computer animation while avoiding the problem of vertigo or of abrupt changes.